<?php

namespace App\Controllers;

use Framework\Database;
use Framework\Validation;
use Framework\Session;


class UserController
{
   protected $db;

   public function __construct(){
       $config=require basePath('config/db.php');
       $this->db=new Database($config);
   }
   /**
    *@return void
    */
    public function login()
    {

       loadView('users/login');
    }

    /** 
     * 
     *@return void
     */
    public function create()
    {
       loadView('users/create');
    }

    /**
     * @return void
     */
    public function store()
    {
        $name=$_POST['name'];  
        $email=$_POST['email'];  
        $city=$_POST['city']; 
        $province=$_POST['province'];   
        $password=$_POST['password'];  
        $passwordConfirmation=$_POST['password_confirmation']; 
        
        $errors=[];

        if(!Validation::email($email)){
        $errors['email']='请输入一个合法的电子邮箱地址！';
        }
        if(!Validation::string($name,2,50)){
        $errors['name']='姓名长度为2到50位!';
        }
        if(!Validation::string($password,6,50)){
        $errors['password']='密码长度至少为6位!';
        }
        if(!Validation::match($password,$passwordConfirmation)){
        $errors['password_confirmation']='两次输入的密码不一致！';
        }
        if(!empty($errors)){
        loadView('users/create',[
             'errors'=>$errors,
             'user'=>[
             'name'=>$name,
             'email'=>$email,
             'city'=>$city,
             'province'=>$province
             ]
             ]);
             exit;
        }else{
            $params=[
                'email'=>$email
            ];

            $user = $this->db->query('SELECT * FROM users WHERE email=:email',$params)->fetch();

            if($user){
                $errors['email']='该邮箱已注册！';
                loadView('users/create',[
                'errors'=>$errors
                ]);
                exit;
            }
            $params=[
                 'name'=>$name,
                 'email'=>$email,
                 'city'=>$city,
                 'province'=>$province,
                 'password'=>password_hash($password,PASSWORD_DEFAULT)
            ];

            $this->db->query('INSERT INTO users(name,email,city,province,password)VALUES(:name,:email,:city,:province,
            :password)',$params);

            $userId=$this->db->conn->lastInsertId();

            Session::set('user',[
                 'id'=>$userId,
                 'name'=>$name,
                 'email'=>$email,
                 'city'=>$city,
                 'province'=>$province
            ]);

            redirect('/');

        }
    }
    /**
     * @return void
     */
    public function logout()
    {

         Session::clearAll();

         $params=session_get_cookie_params();
         setcookie('PHPSESSID','',time()-86400,$params['path'],$params['domain']);

         redirect('/');
    }

    /**
     * @return void 
     */
    public function authenticate(){

         $email=$_POST['email'];
         $password=$_POST['password'];

         $errors=[];

         if(!Validation::email($email)){
              $errors['email']='请输入合法的邮箱地址！';
         }

         if(!Validation::string($password,6,50)){
              $errors['password']='密码为至少六位！';
         }

         if(!empty($errors)){
              loadView('users/login',[
                    'errors'=>$errors
              ]);
              exit;
         }
         $params=[
               'email'=>$email
         ];

         $user=$this->db->query('SELECT * FROM users WHERE email=:email',$params)->fetch();

         if(!$user){
               $errors['errors']='用户不存在或密码错误！';
               loadView('users/login',[
                    'errors'=>$errors
               ]);
               exit;
         }

         if(!password_verify($password,$user->password)){
               $errors['email']='用户不存在或密码错误！';
               loadView('users/login',[
                    'errors'=>$errors
               ]);
               exit;
         }

         Session::set('user',[
         'id'=>$user->id,
         'name'=>$user->name,
         'email'=>$user->email,
         'city'=>$user->city,
         'province'=>$user->province
         ]);
         redirect('/');
    }
}
